using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: logsBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla logs, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 29/08/2011 18:53:38
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class logsBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "logs", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "logs", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(logs datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO logs (descripcion_log,id_emp_id_fk,user_log,host_log,fecha_log) VALUES (?descripcion_log,?id_emp_id_fk,?user_log,?host_log,?fecha_log);";
				string strConectionUpdate = "UPDATE logs SET descripcion_log = ?descripcion_log,id_emp_id_fk = ?id_emp_id_fk,user_log = ?user_log,host_log = ?host_log,fecha_log = ?fecha_log WHERE id_log=?id_log;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_log = new MySqlParameter("?id_log", MySqlDbType.Int32);
				MySqlParameter psqlDescripcion_log = new MySqlParameter("?descripcion_log", MySqlDbType.VarChar);
				MySqlParameter psqlId_emp_id_fk = new MySqlParameter("?id_emp_id_fk", MySqlDbType.Int32);
				MySqlParameter psqlUser_log = new MySqlParameter("?user_log", MySqlDbType.VarChar,50);
				MySqlParameter psqlHost_log = new MySqlParameter("?host_log", MySqlDbType.VarChar,50);
				MySqlParameter psqlFecha_log = new MySqlParameter("?fecha_log", MySqlDbType.Datetime);

				psqlId_log.Value = datos.Id_log;
				psqlDescripcion_log.Value = datos.Descripcion_log;
				psqlId_emp_id_fk.Value = datos.Id_emp_id_fk;
				psqlUser_log.Value = datos.User_log;
				psqlHost_log.Value = datos.Host_log;
				psqlFecha_log.Value = datos.Fecha_log;

				if (!Existe("id_log=" + datos.Id_log))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_log
							, psqlDescripcion_log
							, psqlId_emp_id_fk
							, psqlUser_log
							, psqlHost_log
							, psqlFecha_log
							);
					MessageBox.Show("Se grabo [logs] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_log
							, psqlDescripcion_log
							, psqlId_emp_id_fk
							, psqlUser_log
							, psqlHost_log
							, psqlFecha_log
							);
					MessageBox.Show("Se actualizó [logs] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(logs datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_log='{0}'", datos.Id_log);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("logs"
						, new CampoValor("descripcion_log", datos.Descripcion_log)
						, new CampoValor("id_emp_id_fk", datos.Id_emp_id_fk.ToString())
						, new CampoValor("user_log", datos.User_log)
						, new CampoValor("host_log", datos.Host_log)
						, new CampoValor("fecha_log",ValidarBuilder.FormatoFecha( datos.Fecha_log))
						);
                    //MessageBox.Show("Se grabo [logs] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("logs", filtro
						, new CampoValor("descripcion_log", datos.Descripcion_log)
						, new CampoValor("id_emp_id_fk", datos.Id_emp_id_fk.ToString())
						, new CampoValor("user_log", datos.User_log)
						, new CampoValor("host_log", datos.Host_log)
						, new CampoValor("fecha_log",ValidarBuilder.FormatoFecha( datos.Fecha_log))
						);
                    //MessageBox.Show("Se actualizó [logs] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static logs Recuperar(string filtro)
		{
			logs r = new logs();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_log = Convert.ToInt32(ds.Rows[0]["id_log"]);
					if (ds.Rows[0]["descripcion_log"] != System.DBNull.Value)
						r.Descripcion_log = ds.Rows[0]["descripcion_log"].ToString();
					if (ds.Rows[0]["descripcion_log"] == System.DBNull.Value)
						r.Descripcion_log = "";
					r.Id_emp_id_fk = Convert.ToInt32(ds.Rows[0]["id_emp_id_fk"]);
					if (ds.Rows[0]["user_log"] != System.DBNull.Value)
						r.User_log = ds.Rows[0]["user_log"].ToString();
					if (ds.Rows[0]["user_log"] == System.DBNull.Value)
						r.User_log = "";
					if (ds.Rows[0]["host_log"] != System.DBNull.Value)
						r.Host_log = ds.Rows[0]["host_log"].ToString();
					if (ds.Rows[0]["host_log"] == System.DBNull.Value)
						r.Host_log = "";
					if (ds.Rows[0]["fecha_log"] != System.DBNull.Value)
						r.Fecha_log = Convert.ToDateTime(ds.Rows[0]["fecha_log"]);
					if (ds.Rows[0]["fecha_log"] == System.DBNull.Value)
						r.Fecha_log = DateTime.Now;
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("logs", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmblogs, string filtro, string nombre_display)
		{
			cmblogs.DataSource = ListarTodos(filtro);
			cmblogs.DisplayMember = nombre_display;
			cmblogs.ValueMember = "id_log";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_log AS id_log,descripcion_log AS descripcion_log,id_emp_id_fk AS id_emp_id_fk,user_log AS user_log,host_log AS host_log,fecha_log AS fecha_log", "logs", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<logs> ListarTodos_List(string filtro)
		{
			List<logs> r = new List<logs>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_log="+dt.Rows[i]["id_log"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static logs valida_campos_logs(Control ctrl_id_log,TextBox txt_descripcion_log,Control ctrl_id_emp_id_fk,TextBox txt_user_log,TextBox txt_host_log,DateTime dpk_fecha_log)
		{
			bool r = true;
			logs new_logs = new logs();
			try
			{
				if(ctrl_id_log.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_log = (TextBox)ctrl_id_log;
					if (txt_id_log.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_log","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_log.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_log","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_logs.Id_log = Convert.ToInt32(txt_id_log.Text);
				}
				if(ctrl_id_log.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_log = (ComboBox)ctrl_id_log;
					if (cmb_id_log.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_log","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_logs.Id_log = Convert.ToInt32(cmb_id_log.SelectedValue);
				}
				if (txt_descripcion_log.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la descripcion_log","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_logs.Descripcion_log = txt_descripcion_log.Text;
				if(ctrl_id_emp_id_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_emp_id_fk = (TextBox)ctrl_id_emp_id_fk;
					if (txt_id_emp_id_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_emp_id_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_emp_id_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_emp_id_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_logs.Id_emp_id_fk = Convert.ToInt32(txt_id_emp_id_fk.Text);
				}
				if(ctrl_id_emp_id_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_emp_id_fk = (ComboBox)ctrl_id_emp_id_fk;
					if (cmb_id_emp_id_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_emp_id_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_logs.Id_emp_id_fk = Convert.ToInt32(cmb_id_emp_id_fk.SelectedValue);
				}
				if (txt_user_log.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la user_log","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_logs.User_log = txt_user_log.Text;
				if (txt_host_log.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la host_log","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_logs.Host_log = txt_host_log.Text;
				if (r)
					new_logs.Fecha_log = dpk_fecha_log;

				if(!r)
					new_logs = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_logs;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_log,TextBox txt_descripcion_log,Control ctrl_id_emp_id_fk,TextBox txt_user_log,TextBox txt_host_log,DateTime dpk_fecha_log)
		{
			try
			{
				logs new_logs =valida_campos_logs(ctrl_id_log,txt_descripcion_log,ctrl_id_emp_id_fk,txt_user_log,txt_host_log,dpk_fecha_log); 
				if(new_logs!=null)
					GrabarViaSql(new_logs);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
